package com.example.softwareconfigurationcoursedesign.LoginRegister;

import jakarta.servlet.ServletContext;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

@WebServlet(name = "MessageLogin", value = "/MessageLogin")

public class MessageLogin extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        System.err.println("m");  // 打印调试信息，表示进入 doPost 方法

        // 获取前端传递的验证码和生成的验证码
        String code = request.getParameter("VerificationCode");
        String R_code = request.getParameter("generatedCode");

        response.setContentType("text/html;charset=utf-8");  // 设置响应内容类型为 HTML，字符集为 UTF-8

        // 获取前端传递的手机号码
        String phoneNum = request.getParameter("phoneNumber3");

        ServletContext context = this.getServletContext();

        // 从 ServletContext 中获取数据库相关配置参数
        String dbUrl = context.getInitParameter("DatabaseUrl");
        String dbUsername = context.getInitParameter("DatabaseUsername");
        String dbPassword = context.getInitParameter("DatabasePassword");
        String jdbcDriver = context.getInitParameter("jdbcDriver");

        System.err.println(dbUsername + dbUrl + dbPassword + jdbcDriver);  // 打印数据库相关信息，用于调试
        System.err.println(phoneNum);  // 打印手机号码，用于调试
        System.err.println(R_code);  // 打印生成的验证码，用于调试

        try (Connection connection = DatabaseUtil.getCon(jdbcDriver, dbUrl, dbUsername, dbPassword);
             PreparedStatement pst = connection.prepareStatement("select * from users where phone_number=?")) {

            Class.forName("com.mysql.cj.jdbc.Driver");  // 加载 MySQL 驱动程序

            pst.setString(1, phoneNum);  // 设置 SQL 查询语句中的参数为手机号码

            try (ResultSet rs = pst.executeQuery()) {
                if (rs.next()) {
                    if (R_code.equals(code)) {
                        // 获取会话对象（如果不存在则创建新会话）
                        HttpSession session = request.getSession();
                        // 将用户信息存储在会话属性中
                        session.setAttribute("loggedInUser", phoneNum);
                        response.sendRedirect("TransitionInterface.jsp");  // 验证码正确，重定向到 TransitionInterface.jsp 页面
                    } else {
                        PrintWriter out = response.getWriter();
                        // 弹出提示框，登录失败，并返回主页面
                        out.println("<script>alert('登录失败 将返回主页面  请您再次尝试进行登录'); window.location.href='LoginRegisterPage.jsp';</script>");
                        out.flush();
                    }
                } else {
                    PrintWriter out = response.getWriter();
                    // 弹出提示框，登录失败，未找到用户，并返回主页面
                    out.println("<script>alert('登录失败 将返回主页面 未找到该用户 请您注册之后再次尝试进行登录'); window.location.href='LoginRegisterPage.jsp';</script>");
                    out.flush();
                }
            }
        } catch (SQLException | IOException throwable) {
            // 捕获 SQL 异常或 IO 异常，记录日志并重定向到 error.html 页面
            Logger.getLogger(Servlet.class.getName()).log(Level.SEVERE, "数据库操作失败", throwable);
            response.sendRedirect("error.html");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);  // 抛出运行时异常，表示类未找到
        }
    }
}

